package annotationDemo;

import java.lang.annotation.Documented;
import java.lang.annotation.ElementType;
import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;
import java.lang.annotation.Target;

/**
 * 
 * @Retention(RetentionPolicy.SOURCE)   //注解仅存在于源码中，在class字节码文件中不包含
@Retention(RetentionPolicy.CLASS)     // 默认的保留策略，注解会在class字节码文件中存在，但运行时无法获得，
@Retention(RetentionPolicy.RUNTIME)  // 注解会在class字节码文件中存在，在运行时可以通过反射获取到



@Inherited
Inherited 是继承的意思，但是它并不是说注解本身可以继承，而是说如果一个超类被 @Inherited 注解过的注解进行注解的话，
那么如果它的子类没有被任何注解应用的话，那么这个子类就继承了超类的注解。代码来解释:
@Inherited
@Retention(RetentionPolicy.RUNTIME)
@interface Test {}

@Test
public class A {}

public class B extends A {}

注解 Test 被 @Inherited 修饰，之后类 A 被 Test 注解，类 B 继承 A,类 B 也拥有 Test 这个注解。



Repeatable 自然是可重复的意思。@Repeatable 是 Java 1.8 才加进来的，所以算是一个新的特性。
举个例子，一个人他既是程序员又是产品经理,同时他还是个画家。
@interface Persons {
    entity.Person[]  value();
}

@Repeatable(Persons.class)
@interface entity.Person{
    String role default "";
}

@Person(role="artist")
@Person(role="coder")
@Person(role="PM")
public class SuperMan{

}


 * @author zyj-2018-5-23 09:35:54
 *
 */
@Retention(RetentionPolicy.RUNTIME)
@Target({ ElementType.FIELD, ElementType.METHOD }) // 定义注解的作用目标**作用范围字段、枚举的常量/方法
@Documented // 说明该注解将被包含在javadoc中
public @interface FieldMeta {
	/** 
	* 是否为序列号 
	* @return 
	*/
	boolean id() default false;

	/** 
	 * 字段名称 
	 * @return 
	 */
	String name() default "";

	/** 
	 * 是否可编辑 
	 * @return 
	 */
	boolean editable() default true;

	/** 
	 * 是否在列表中显示 
	 * @return 
	 */
	boolean summary() default true;

	/** 
	 * 字段描述 
	 * @return 
	 */
	String description() default "";

	/** 
	 * 排序字段 
	 * @return 
	 */
	int order() default 0;
}
